package com.pig4cloud.pigx.common.customize.api.annotation;

import com.pig4cloud.pigx.user.enums.UserApiKeyEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 开放api设置
 * <p>1、在http接口上，标注版本、频率、权限、是否需要验签等信息
 * <p>1、在JsonMessageHandler上，表示该ws处理器是开放的
 *
 * @since 2022/10/27 10:10
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface OpenApi {
	/**
	 * 版本号
	 */
	String version() default "1";

	/**
	 * 访问频率限制
	 * <p> 限制10(rateLimitRange) 秒(rateLimitRangeUnit) 内最多访问 1(rateLimit)次
	 * <p> 每单位时间允许访问多少次，0表示无限制</p>
	 */
	int rateLimit() default 0;

	/**
	 * 访问频率限制时间范围
	 * <p> 限制10(rateLimitRange) 秒(rateLimitRangeUnit) 内最多访问 1(rateLimit)次
	 * <p> 0表示无限制
	 */
	long rateLimitRange() default 0;

	/**
	 * 访问频率限制时间范围单位
	 * <p> 限制10(rateLimitRange) 秒(rateLimitRangeUnit) 内最多访问 1(rateLimit)次
	 */
	TimeUnit rateLimitRangeUnit() default TimeUnit.SECONDS;

	/**
	 * 权限
	 */
	UserApiKeyEnum.Permission permission() default UserApiKeyEnum.Permission.NONE;

	/**
	 * 是否需要验签
	 */
	boolean needSignature() default false;
}
